/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package com.lanyou.esb.cook.proxy.monitor;

import java.util.Collection;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.lanyou.esb.cook.proxy.entity.FieldSystem;
import com.lanyou.esb.cook.proxy.manager.FieldSystemManager;

@Path("/services/")
@Consumes(MediaType.APPLICATION_JSON)
public class ProxyService {

	private FieldSystemManager fieldSystemManager;

	public FieldSystemManager getFieldSystemManager() {
		return fieldSystemManager;
	}

	public void setFieldSystemManager(FieldSystemManager fieldSystemManager) {
		this.fieldSystemManager = fieldSystemManager;
	}

	@GET
	@Path("/systems/")
	@Produces(MediaType.APPLICATION_JSON)
	public Collection<FieldSystem> getFieldSystems() {
		return fieldSystemManager.getAllFieldSystems();
	}

	@GET
	@Path("/systems/{code}/")
	@Produces(MediaType.APPLICATION_JSON)
	public FieldSystem getFieldSystem(@PathParam("code") String systemCode) {
		FieldSystem c = fieldSystemManager.getFieldSystem(systemCode);
		return c;
	}

	@GET
	@Path("/systems/reload/")
	@Produces(MediaType.APPLICATION_JSON)
	public Response reloadFieldSystems() {
		fieldSystemManager.reloadFieldSystems();
		Response r = Response.ok().build();
		return r;
	}

	@GET
	@Path("/systems/reload/{code}/")
	@Consumes(MediaType.APPLICATION_JSON)
	public Response reloadFieldSystem(@PathParam("code") String systemCode) {
		FieldSystem c = fieldSystemManager.reloadFieldSystemByCode(systemCode);
		Response r;
		if (c != null) {
			r = Response.ok().build();
		} else {
			r = Response.notModified().build();
		}
		return r;
	}

	@DELETE
	@Path("/systems/{code}/")
	public Response deleteFieldSystem(@PathParam("code") String systemCode) {
		FieldSystem c = fieldSystemManager.getFieldSystem(systemCode);
		Response r;
		if (c != null) {
			r = Response.ok().build();
			fieldSystemManager.removeFieldSystem(systemCode);
		} else {
			r = Response.notModified().build();
		}
		return r;
	}

}
